package com.project.class3_28;

import java.lang.reflect.Method;

public class Test {
    public static void main(String[] args) {
//        try {
//            Class.forName("com.project.class3_28.X");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        new X();
//        new X();
//        Object x = new X();
//        System.out.println(x.getClass() == X.class);
//        System.out.println(x.getClass() == Object.class);

        X x = new X();
        Class classX = X.class;
        try {
            //根据方法名，得到方法对象
//            Method m = classX.getMethod("test");
//            m.invoke(x);//x.test();

            //根据方法名，以及方法参数列表，得到方法对象
            Method m = classX.getMethod("add",int.class,int.class);
            //执行该方法。并传入实参。returnObj接收方法执行后的返回值
            Object returnObj = m.invoke(x,2,3);
            System.out.println(returnObj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class X{
    private int x;
    private double y;
    static {
        System.out.println("X静态块");
    }
    public X(){
        System.out.println("创建X");
    }

    public void test(){
        System.out.println("test方法");
    }

    public int add(int a,int b){
        return a+b;
    }
}